import wx from 'weixin-js-sdk'
import _AP from './ap'
import { getQueryString, paramsToStringify } from './tools'
import { jsSdk, WxUserLogin, payOrder } from '@/request/api'
import { Toast } from 'vant'
// 判断微信环境
function isWeChat () {
  const ua = window.navigator.userAgent.toLowerCase()
  // 通过正则表达式匹配ua中是否含有MicroMessenger字符串
  return ua.match(/MicroMessenger/i) === 'micromessenger'
}

// 授权
async function WeChatAuth (options) {
  console.log((!isWeChat() ? '非' : '') + '微信环境', options)
  if (!isWeChat()) return
  if (!options.appid) return console.error('请填写appid')
  if (!options.state) return console.error('请填写state')
  const params = getQueryString(location.href)
  if (params.code && params.state === (options.state || 'weixinAuthorize')) {
    // 用code 向后端请求用户信息
    const { data } = await WxUserLogin(params)
    console.log(data)
    return
  }

  // 授权配置参数
  const authParams = {
    appid: options.appid,
    redirect_uri: encodeURIComponent(location.href.split('?')[0]),
    response_type: 'code',
    scope: options.scope || 'snsapi_base', // snsapi_base静默授权 0,snsapi_userinfo用户授权 1
    state: options.state || 'weixinAuthorize' // 重定向后会带上state参数
  }
  const strData = paramsToStringify(authParams)
  const oAuthUrl = `https://open.weixin.qq.com/connect/oauth2/authorize?${strData}#wechat_redirect`
  location.replace(oAuthUrl)
}
// jsApi初始化
async function init (success, fail) {
  if (!isWeChat()) {
    fail && fail()
    return
  }
  // 用地址向后端换取参数
  const params = { url: location.href }
  console.log(params)
  const { data } = await jsSdk(params)
  // 请求返回的参数
  const configData = { ...data }
  configData.jsApiList = ['chooseWXPay']
  // {
  // debug: true, //开启调试模式,
  // appId: '', // 必填，公众号的唯一标识
  // timestamp: '', // 必填，生成签名的时间戳
  // nonceStr: '', // 必填，生成签名的随机串
  // signature: '', // 必填，签名
  // jsApiList: ['chooseWXPay']
  // }
  // config注入权限验证配置
  wx.config(configData)
  // ready接口处理成功验证
  wx.ready(function () {
    success && success()
    // config信息验证后会执行ready方法，
  })
  // error接口处理失败验证
  wx.error(function (err) {
    console.log(err)
    // config信息验证失败会执行error函数，
  })
}

/**
 * 支付及类型
 * @param {object} data [订单号，支付类型]
 * @returns
 */
export async function pay (rest) {
  const { orderNo, payType, callback } = rest
  console.log(orderNo, payType, callback)
  const { code, data } = await payOrder({ orderNo, payType })
  if (code === 0) {
    if (payType === 1) {
      let options
      try {
        options = JSON.parse(data || '')
      } catch (e) {}
      WxPay(options, callback)
    } else if (payType === 2) {
      Alipay(data)
    }
  } else {
    console.log('支付接口错误')
  }
}

/**
 * 微信环境支付数据
 * @param {*} data
 * @returns
 */

function WxPay (data, callback) {
  console.log('微信支付', data, callback)
  data.timestamp = data.timestamp || data.timeStamp
  if (
    !data.timestamp ||
    !data.nonceStr ||
    !data.package ||
    !data.signType ||
    !data.paySign
  ) {
    return Toast('支付签名参数错误')
  }
  wx.chooseWXPay({
    ...data,
    success: function (res) {
      /*   const backUrl =
        ServeUrl +
        '/pay-status?status=success&callback=' +
        callback
      location.replace(backUrl) */
    },
    fail: function (err) {
      console.log(err)
      /* const backUrl =
        ServeUrl +
        '/dingdong/static/pay-status?status=lose&callback=' +
        callback
      location.replace(backUrl) */
    }
  })
}

/**
 * 支付宝H5支付
 * @param {*} data
 */
function Alipay (data) {
  console.log('支付宝支付', data)
  const div = document.createElement('div')
  div.innerHTML = data
  document.querySelector('body').appendChild(div)
  document.forms[0].acceptCharset = 'utf-8'
  // document.forms[0].submit();

  let queryParam = ''
  Array.prototype.slice
    .call(document.querySelectorAll('input[type=hidden]'))
    .forEach(function (ele) {
      queryParam += ele.name + '=' + encodeURIComponent(ele.value) + '&'
    })
  const gotourl = document.forms[0].action + '&' + queryParam

  const alipayBack = `${window.location.origin}/alipay?goto=`
  _AP.pay(gotourl, alipayBack)
}

// 自定义“分享到朋友圈”及“分享到 QQ 空间”按钮的分享内容（1.4.0）
export function ShareData (params) {
  wx.updateTimelineShareData({
    title: params.title, // 分享标题
    link: params.link, // 分享链接，该链接域名或路径必须与当前页面对应的公众号 JS 安全域名一致
    imgUrl: params.imgUrl, // 分享图标
    success: function () {
      // 设置成功
    }
  })
}
// 自定义“分享到朋友圈”及“分享到 QQ 空间”按钮的分享内容（1.4.0)
export function ShareDataFriends (params) {
  wx.ready(function () {
    // 需在用户可能点击分享按钮前就先调用
    wx.updateTimelineShareData({
      title: params.title, // 分享标题
      link: params.link, // 分享链接，该链接域名或路径必须与当前页面对应的公众号 JS 安全域名一致
      imgUrl: params.imgUrl, // 分享图标
      success: function () {
        // 设置成功
      }
    })
  })
}
export default {
  install (app, options) {
    WeChatAuth(options)
    init()
  }
}
